// $Id: Artist.java 365 2009-05-15 08:31:17Z huijzer $

/*    
    Aoide is a web-based music catalog using the Spring Framework.
    Copyright (C) 2009  Arjan Huijzer

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

    You can contact Arjan Huijzer by sending an e-mail to huijzer@gmail.com.
*/

package org.aoide.core.persistence;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import nu.xom.Attribute;
import nu.xom.Document;
import nu.xom.Element;

import org.apache.commons.lang.builder.ToStringBuilder;

import com.google.appengine.api.datastore.Key;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Artist {

	public static final String UUID = "uuid";
	
	@PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
	
	@Persistent
	private String uuid;
	
	@Persistent
	private String name;
	
	@Persistent
	private Date created;
	
	@Persistent
	private List<Recording> recordings = new ArrayList<Recording>();
	
    public Key getKey() {
        return key;
    }
	
	public String getUuid() {
		return uuid;
	}

	public void setUuid(String uuid) {
		this.uuid = uuid;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Date getCreated() {
		return created;
	}

	public void setCreated(Date created) {
		this.created = created;
	}

	public List<Recording> getRecordings() {
		return recordings;
	}

	public void setRecordings(List<Recording> recordings) {
		this.recordings = recordings;
	}	
	
	public Element toXmlElement() {
        
        Element artistElement = new Element("artist");
        artistElement.addAttribute( new Attribute("uuid", uuid) );
        
        // Add <name> element
        Element nameElement = new Element("name");
        nameElement.appendChild(name);
        artistElement.appendChild(nameElement);

        // Add <created> element
        Element createdElement = new Element("created");
        createdElement.appendChild(created.toString());
        artistElement.appendChild(createdElement);
        
        return artistElement;                           
	}

	public Document toXmlDocument() {
        Element artistElement = this.toXmlElement();
        Document doc = new Document(artistElement);
        
        // Add <recordings> element
        if (!recordings.isEmpty()) {
                Element recordingsElement = new Element("recordings");
                artistElement.appendChild(recordingsElement);

                // Add <recording> elements
                for (Recording recording : recordings) {
                	recordingsElement.appendChild( recording.toXmlElement() );
                }
        }
        
        return doc;
}

	public String toString() {
	        return new ToStringBuilder(this)
	                .append("uuid", uuid)
	                .append("name", name)
	                .toString();
	}

}
